/**
 * API请求模板生成器
 * 
 * 为文档生成系统提供符合项目HTTP封装规范的API调用示例代码
 */

// HTTP调用风格模板
const API_TEMPLATES = {
    // 查询接口模板
    FIND_LIST: `// 查询{{tableName}}列表
import { autoPost } from '@/utils/http';
import { I{{interfaceName}} } from '@/types/api';

// 使用金牛座 query 接口进行查询
const result = await autoPost('/query', {
  {{tableName}}: {
    where: ["like", "name", "%关键字%"],  // 查询条件
    page: 1,                             // 页码
    pagesize: 10,                        // 每页记录数
    orderby: ["create_time", "desc"]     // 排序方式
  }
});

// result直接是返回的数据，无需通过response.data获取
// 遍历查询结果
if (result && result.records) {
  console.log('总记录数：', result.total);
  result.records.forEach((item: I{{interfaceName}}) => {
    console.log(item.{{idField}}, item.name);
  });
}`,

    // 添加接口模板
    ADD: `// 新增{{tableName}}记录
import { autoPost } from '@/utils/http';
import { I{{interfaceName}} } from '@/types/api';

// 使用金牛座 crud/create 接口创建记录
const result = await autoPost('/crud/create', {
  {{tableName}}: {
{{fields}}
  }
});

// result是创建成功后返回的数据
if (result) {
  console.log('新增记录ID：', result.{{idField}});
}`,

    // 更新接口模板
    UPDATE: `// 更新{{tableName}}记录
import { autoPost } from '@/utils/http';
import { I{{interfaceName}} } from '@/types/api';

// 使用金牛座 crud/update 接口更新记录
const result = await autoPost('/crud/update', {
  {{tableName}}: {
{{updateFields}},
    where: { {{idField}}: '记录ID' }  // 更新条件
  }
});

// result表示操作是否成功
if (result) {
  console.log('更新成功');
}`,

    // 删除接口模板
    DELETE: `// 删除{{tableName}}记录
import { autoPost } from '@/utils/http';
import { I{{interfaceName}} } from '@/types/api';

// 使用金牛座 crud/delete 接口删除记录
const result = await autoPost('/crud/delete', {
  {{tableName}}: {
    {{idField}}: '记录ID'  // 要删除的记录ID
  }
});

// result表示操作是否成功
if (result) {
  console.log('删除成功');
}

// 逻辑删除（如果表支持）
const softDeleteResult = await autoPost('/crud/update', {
  {{tableName}}: {
    is_deleted: 1,
    where: { {{idField}}: '记录ID' }
  }
});`
};

/**
 * 生成API接口示例代码
 * @param {string} apiType - 接口类型 ('FIND_LIST'|'ADD'|'UPDATE'|'DELETE')
 * @param {string} tableName - 表名
 * @param {string} interfaceName - 接口名称
 * @param {Array} fields - 字段数组
 * @param {string} idField - 主键字段名
 * @returns {string} 生成的代码示例
 */
function generateApiExample(apiType, tableName, interfaceName, fields, idField) {
    let template = API_TEMPLATES[apiType];

    // 将驼峰命名的接口名修正
    interfaceName = tableName
        .split('_')
        .map(part => part.charAt(0).toUpperCase() + part.slice(1))
        .join('');

    // 生成字段列表
    let fieldsStr = '';
    if (apiType === 'ADD') {
        fieldsStr = fields
            .filter(field => field.columnName !== 'id' &&
                field.columnName !== 'create_time' &&
                field.columnName !== 'update_time')
            .map((field, index) => `    ${field.columnName}: '值${index + 1}'`)
            .join(',\n');
    } else if (apiType === 'UPDATE') {
        fieldsStr = fields
            .filter(field => field.columnName !== idField &&
                field.columnName !== 'create_time' &&
                field.columnName !== 'update_time')
            .slice(0, 2) // 仅选择两个字段作为示例
            .map(field => `    ${field.columnName}: '新值'`)
            .join(',\n');
    }

    // 替换模板中的占位符
    let result = template
        .replace(/{{tableName}}/g, tableName)
        .replace(/{{interfaceName}}/g, interfaceName)
        .replace(/{{idField}}/g, idField)
        .replace(/{{fields}}/g, fieldsStr)
        .replace(/{{updateFields}}/g, fieldsStr);

    return result;
}

module.exports = {
    API_TEMPLATES,
    generateApiExample
}; 